package com.example.module_motocircle.ui.post

import com.example.module_motocircle.http.MotorCircleApi
import com.example.module_motocircle.http.MotorCircleNetModule
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.flow.flowOn
import kotlinx.coroutines.flow.map
import javax.inject.Inject
//@Inject constructor()
//告诉 Hilt 这个类需要通过依赖注入创建实例
class PostListRepository @Inject constructor() {
    @Inject
    @MotorCircleNetModule.CommonMainApi
    lateinit var motorCircleApi: MotorCircleApi

    /*
    检查是否关注
     */
    fun checkIfHasFocus() = flow {
        //flow { ... }
        //作用：创建一个冷流（Cold Flow），当有收集者（如 collect）时才会执行内部的代码块。
        //特点：每次收集都会重新触发网络请求（适合实时数据）
        emit(motorCircleApi.checkIfHasFocus())
        //emit(...)
        //将网络请求的结果发射（发送）到 Flow 中，供下游收集者使用。
    }.flowOn(Dispatchers.IO)
    //冷流（Cold Flow）：每次收集时重新执行（适合一次性请求）。
    //热流（Hot Flow）：数据共享（如 StateFlow/SharedFlow），适合持续状态更新。

    /**
     * 帖子列表
     */
    fun pageList(
        sortBy: String? = null,
        topicId: String? = null,
        memberId: String? = null,
        ifFocus: Int? = null,
        pageNum: Int,
        pageSize: Int = 10,
        keyword: String? = null
    ) = flow {
        emit(
            motorCircleApi.pageList(
                sortBy,
                topicId,
                memberId,
                ifFocus,
                pageNum,
                pageSize,
                keyword
            )
        )
    }.flowOn(Dispatchers.IO)
    /**
     * 点赞帖子
     */
    fun giveLike(postsId: String) = flow {
        emit(motorCircleApi.giveValidationLike(postsId)) //校验帖子
    }.map {
        if (it.data){//校验通过
            motorCircleApi.giveLike(postsId) //点赞和取消点赞
        }else{//校验不通过
            it
        }
    }.flowOn(Dispatchers.IO)
}